export function formatDate(date, formater = 'yyyy-MM-dd hh:mm:ss', isPad = true) {
    formater = _formater(formater)
    const dateInfo = {
        yyyy: date.getFullYear().toString(),
        MM: (date.getMonth() + 1).toString(),
        dd: date.getDate().toString(),
        hh: date.getHours().toString(),
        mm: date.getMinutes().toString(),
        ss: date.getSeconds().toString(),
    }

    if (isPad) {
        for (key in dateInfo) {
            _padZero(key, 2)
        }
    }

    return formater(dateInfo)

    // 辅助函数，不足2位前面补零
    function _padZero(prop, len) {
        dateInfo[prop] = dateInfo[prop].padStart(len, '0')
    }

    // 辅助函数，入参formater统一转 yyyy-MM-dd hh:mm:ss 格式
    function _formater(formater) {
        if (typeof formater === 'function') {
            return formater
        }
        else if (typeof formater !== 'string') {
            throw new Error('formater must be a string!')
        }
        else if (formater === 'date') {
            formater = 'yyyy-MM-dd'
        }
        else if (formater === 'dateTime') {
            formater = 'yyyy-MM-dd hh:mm:ss'
        }
        return (dateInfo) => {
            const { yyyy, MM, dd, hh, mm, ss } = dateInfo
            return formater.replace('yyyy', yyyy)
                .replace('MM', MM)
                .replace('dd', dd)
                .replace('hh', hh)
                .replace('mm', mm)
                .replace('ss', ss)
        }
    }
}


// console.log(formatDate(new Date(), 'date'));

// console.log(formatDate(new Date(), 'dateTime'));

// console.log(formatDate(new Date(), 'yyyy-MM-dd hh:mm:ss'));

// console.log(formatDate(new Date(), 'yyyy/MM/dd hh:mm:ss'));

// console.log(formatDate(new Date(), 'yyyy/MM/dd'));

// console.log(formatDate(new Date(), dateInfo => {
//     const { yyyy, MM, dd, hh, mm, ss } = dateInfo
//     const year = new Date().getFullYear()
//     if (yyyy < year) {
//         return `${year - yyyy}年前`
//     }
//     else if (yyyy > year) {
//         return `${yyyy - year}年前`
//     }
//     else {
//         return '今年'
//     }
// }));

